function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.say = function() {
  console.log(1)
}

function Star(name, age, money) {
  // !#1 借用/盗用构造函数继承
  // !#2 借用构造函数继承的问题：不能父类原型上的方法
  Person.call(this, name, age)
  this.money = money
}

// p 上面啥都有，例如有 name 属性、有 age 属性、有 say 方法
/* const p = new Person()
// 我把一个啥都有的东西给了 Start.prototype，也就意味着 Star.prototype 也是啥都有
Star.prototype = p */
// 我把一个啥都有的东西给了 Start.prototype，也就意味着 Star.prototype 也是啥都有

// !#3 原型继承（继承的是父构造函数原型上的方法）
Star.prototype = new Person()
Star.prototype.constructor = Star

const r = new Star('wsc', 38, 100000)

console.log(Star.prototype.constructor === Star)
console.log(r.constructor === Star)
if(r.constructor === Star) {
  console.log('干明星该干的事')
}

console.log(r)

// !#4 组合继承 = 借用构造函数继承（继承的是属性） + 原型继承（继承的是父类原型上的方法）